#include "Arduino.h"
#include "config.h"

SPIClass MySPI(HSPI);
String fileNames[maxFiles];  // 存储文件名的数组
int fileCount = 0;           // 实际文件数量


void sdSetup() {
  pinMode(SD_CS, OUTPUT);
  digitalWrite(SD_CS, HIGH);
  if (!SD.begin(SD_CS, MySPI)) {
    Serial.println("sd error");
  }
}


void listDir(String dirname) {
  if (!SD.begin(SD_CS,MySPI)) {
    Serial.println("sd error");
  }
  File root = SD.open(dirname);
  while (true) {
    File file = root.openNextFile();
    if (!file) {
      // 没有更多文件
      break;
    }

    // 只处理文件，跳过子目录
    if (!file.isDirectory()) {
      fileNames[fileCount] = file.name();
      fileCount++;

      // 防止超出数组容量
      if (fileCount >= maxFiles) {
        break;
      }
    }
    file.close();
  }

  root.close();
}

File sdRandomOpen(String dirname){
    // 列出指定文件夹中的所有文件
  listDir(dirname); // 替换为你的文件夹路径

  // 如果文件夹中有文件
  if (fileCount > 0) {
    // 随机选择一个文件
    randomSeed(analogRead(0));
    int randomFileIndex = random(fileCount);
    String randomFileName = fileNames[randomFileIndex];
    // 尝试打开选中的文件
    File file = SD.open(dirname+"/"+randomFileName);
    if (file) {
      Serial.println("Opened file: " + randomFileName);
      // 在这里可以处理文件

      return file;
    } else {
      Serial.println("Failed to open file: " + randomFileName);
      return File();
    }
  } else {
    Serial.println("No files found");
    return File();
  }
}